題目:
(6 級) 水仙花數
水仙花數 (Narcissistic number),也被稱為超完全數字不變數 (pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數 (Armstrong number)。
是指一個 N 位數的正整數,其每個數位的 N 次方總和等於該數字本身。
範例:
數字: 153 (3 digits)
1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
數字: 1634 (4 digits)
1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634
判斷給予的參數是否為水仙花數,回傳 true
或 false
。
Ruby 解法:
def narcissistic?(value)
# 先把參數 value 轉成陣列
arr = value.to_s.split("")
# 算出陣列長度以得知該數字有幾位數
len = arr.length
# 利用 map method 對每個陣列的 element 轉回數字
# 並且算出陣列長度次方
# 最後加總並判斷是否等於原來的參數 value
arr.map { |n| n.to_i ** len }.sum == value
end
JavaScript 解法:
function narcissistic(value) {
// 先把參數 value 轉成陣列
let arr = value.toString().split("");
// 算出陣列長度以得知該數字有幾位數
let len = arr.length;
// 利用 reduce function 算出總和並將結果存入變數 result
let result = arr.reduce((sum, n) => {
// 算出每個數字乘上陣列長度次方並加總
return sum += n ** len;
}, 0);
// 最後判斷是否等於原來的參數 value
return result === value;
}